iT邦幫忙

2024 iThome 鐵人賽

DAY 6
0
DevOps

DevOps需要的技能樹...(應該)都點得到!系列 第 6

Day 6: 使用 kubectl 指令管理 Kubernetes 集群

  • 分享至 

  • xImage
  •  

本章節「Kubernetes (k8s)」概要

Day 5: Kubernetes 基本架構及安裝
Day 6: 使用 kubectl 指令管理 Kubernetes 集群
Day 7: Kubernetes Pod 與 Deployment 深入解析
Day 8: Kubernetes Service 與負載均衡機制
Day 9: Kubernetes Persistent Volumes (PV) 與 Persistent Volume Claims (PVC)

認識kubectl

kubectl 是 Kubernetes 的命令行工具,用於與 Kubernetes API 交互,管理和操作 Kubernetes 集群。通過 kubectl,用戶可以部署應用程序、檢查資源狀態、查看日誌、調試問題,並進行各種集群管理任務。它是使用 Kubernetes 的核心工具,簡化了集群運維和管理。

還記得上一篇安裝的k8s三件套嗎?

kubeadm:用於初始化和配置 Kubernetes 集群的工具。
kubelet:運行在每個 Node 上的代理,負責管理 Pod 和容器。
kubectl:與 Kubernetes API 交互的命令行工具,用於管理集群。

所以接下來有關k8s的操作基本上都是圍繞著kubectl開頭的指令喔~

基礎指令

關於後面帶的參數
-n:指定在哪個namespace底下
--all-namespaces:查詢所有namespaces底下的內容
-o wide:查詢詳情

#查看node
kubectl get node
#查看node及詳情
kubectl get node -o wide

#查看pod
kubectl get pod -n default
#查看所有pod
kubectl get pod --all-namespaces

#查看service
kubectl get services

#查看deployment
kubectl get deployment

現在都空空的齁,那就來部署一個服務試試看吧

部署apache

雖然可以直接運行一個pod不過沒有人這樣玩
基本上都是依賴一個deployment部署一個服務為單位

Deployment 提供了一種聲明式配置方式,你可以定義應用程序的期望狀態,而 Kubernetes 會自動調整資源以達到這個狀態。這簡化了集群管理,並確保應用程序始終處於理想狀態。

Pod 本身是短暫的,可能因為節點故障或其他原因被刪除或重啟。使用 Deployment 則可以確保當一個 Pod 崩潰或被刪除時,自動重新創建新的 Pod,保持應用程序的高可用性。

以下採用現成的示範起pod,明天再來手寫

#建立deployment
kubectl create deployment apache --image=httpd

顯示如下
test@test:~$ kubectl get pod
NAME READY STATUS RESTARTS AGE
apache-7f6fddb7df-b8qvj 1/1 Running 0 21s

再來需要暴露端口,才能從集群外部訪問到這個apache網站

kubectl expose deployment apache --port=80 --target-port=80 --type=NodePort

這時候就能查看映射出來的端口是多少,記下80:後面這個數字

kubectl get services apache

https://ithelp.ithome.com.tw/upload/images/20240803/20168384zfn8dQGcGD.jpg

再來打開瀏覽器訪問看看
http://localhost:31611

http://Node-IP:NodePort/

https://ithelp.ithome.com.tw/upload/images/20240803/20168384DUQzcHGvxb.jpg

至此就完成了一個k8s的簡易部署
除了通過kubectl get pod可以查看到pod為running狀態
通過瀏覽器訪問也能查看apache服務的運作是正常的

檢查pod

#查看pod,並記下pod的全名
kubectl get pod
#查看pod日誌
kubectl logs apache-7f6fddb7df-b8qvj
#進入容器(如果你要排查應用層的錯誤)
kubectl exec -it apache-7f6fddb7df-b8qvj -- /bin/bash

https://ithelp.ithome.com.tw/upload/images/20240803/20168384SrnhYmbqHh.jpg

清理環境

#只刪除pod
kubectl delete pod apache-7f6fddb7df-b8qvj
#刪除部署文件
kubectl delete deployment apache

同場加映1:為什麼不能只刪除pod就好?

因為如果你只嘗試kubectl delete pod的話
你會發現該pod進入pending狀態及terminating狀態之後
若發現deployment文件還存在的話,就會再自動建立一個pod維持高可用性喔
因此單單一個kubectl delete pod也會被拿來當作「重啟」的指令

同場加映2:排查錯誤的步驟

最常見到的就是pod起不來
卡在terminating, waiting, pending, ImagePullBackOff...等狀態

假設健康檢查失敗
那麼在kubectl describe的時候會出現健康檢查失敗的事件
假設容器本身的運行就有問題
那麼在kubectl logs的時候可以查看運行這個pod之後發生了些什麼

#查看pod詳情,是否有錯誤事件發生
kubectl describe pod apache-7f6fddb7df-b8qvj
#查看pod日誌,是否服務運行或初始化失敗
kubectl logs -f apache-7f6fddb7df-b8qvj

至此,在操作k8s的方面就能慢慢累積出熟悉經驗~


上一篇
Day 5: Kubernetes 基本架構及安裝
下一篇
Day 7: Kubernetes Pod 與 Deployment 深入解析
系列文
DevOps需要的技能樹...(應該)都點得到!25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言